{
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "zzBv5XkTGur2"
      },
      "source": [
        "# 安装，导入\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 5,
      "metadata": {
        "id": "9-xShbR18N_G"
      },
      "outputs": [],
      "source": [
        "from IPython.display import clear_output\n",
        "clear_output(wait=False)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 6,
      "metadata": {
        "id": "lp2cLbPS8RhG"
      },
      "outputs": [],
      "source": [
        "import pennylane as qml\n",
        "from pennylane import numpy as np\n",
        "from pennylane.templates import RandomLayers\n",
        "#import tensorflow as tf\n",
        "#from tensorflow import keras\n",
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns\n",
        "\n",
        "sns.set_theme()"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "w38G4jmvGyzk"
      },
      "source": [
        "# 导入数据"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "LHAjYB6-Mhy9"
      },
      "source": [
        "### 由 数据做量子卷积处理（核心）.ipynb 创建的 npy 数据文件已在此处导入。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 8,
      "metadata": {
        "id": "gOJtRzhk7pXk"
      },
      "outputs": [],
      "source": [
        "x_train_final = np.load(\"x_train_final.npy\")\n",
        "y_train = np.load(\"y_train.npy\")\n",
        "\n",
        "x_test_final = np.load(\"x_test_final.npy\")\n",
        "y_test = np.load(\"y_test.npy\")"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 9,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "3z0DcNmj8jWB",
        "outputId": "706190ef-a02a-433d-f640-416f4b68e45d"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "((250, 256), (250,), (65, 256), (65,))"
            ]
          },
          "execution_count": 9,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "x_train_final.shape, y_train.shape, x_test_final.shape, y_test.shape"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "oy37edV6Mu-G"
      },
      "source": [
        "#### 训练和测试数据已连接起来以进一步减小尺寸，因为 256 个特征很难在量子电路上编码。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 10,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Ebzr82i2LoGO",
        "outputId": "d51c0eed-adeb-447b-d17d-ec8e80bc007f"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "(315, 256)\n"
          ]
        }
      ],
      "source": [
        "X = np.concatenate((x_train_final, x_test_final))\n",
        "Y = np.concatenate((y_train, y_test))\n",
        "print(X.shape)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "T3C_OXBWNF90"
      },
      "source": [
        "#### 从 256 个功能中，选择了 11 个功能将进一步使用。 "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 11,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "EbIaiDf2LoGP",
        "outputId": "7c650006-75b6-48b9-80e9-f0ebf819b016"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "(315, 11)\n"
          ]
        }
      ],
      "source": [
        "from sklearn.svm import LinearSVC\n",
        "from sklearn.feature_selection import SelectFromModel\n",
        "lsvc = LinearSVC(C=0.01, penalty=\"l1\", dual=False).fit(X, Y)\n",
        "model = SelectFromModel(lsvc, prefit=True)\n",
        "X = model.transform(X)\n",
        "print(X.shape)\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 12,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "8qsnh5rZUenC",
        "outputId": "fe0d15eb-511a-49ab-c6d3-5c8a1fc3fded"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "(315, 2)"
            ]
          },
          "execution_count": 12,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "import sklearn.decomposition\n",
        "n_features = 2\n",
        "pca = sklearn.decomposition.PCA(n_components=n_features)\n",
        "pca.fit(X)\n",
        "X = pca.transform(X)\n",
        "X.shape"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "OV0PX3SMNSif"
      },
      "source": [
        "#### 训练和测试数据再次分离。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 13,
      "metadata": {
        "id": "hU8stCyPLoGQ"
      },
      "outputs": [],
      "source": [
        "x_train_final = (X[:250])\n",
        "x_test_final = (X[250:])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 14,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 287
        },
        "id": "VyDjP3oALoGS",
        "outputId": "ed4e061a-8a37-4f09-f9c4-dad8a2ba8cbc"
      },
      "outputs": [
        {
          "data": {
            "image/png": "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LqfrDQZXdIVoRVEUJfipoUVFURQlqKlApiiKogQ1FcgURVGUoKYCmaIoihLUVCBTFEVRgpoKZIqiKEpQU4FMURRFCWoqkCmKoihBTQUyRVEUJaipQNZCjz32GDfddBPTpk1jzpw5bN++vaObdEGWL1/O1KlTSUtLY9GiRR3dnDbZv38/s2fPZsqUKcyePZsDBw50dJPa7KmnnmLChAmkpKSwa9eujm7OBSspKeG+++5jypQpTJ06lXnz5lFcXNzRzbogDz74INOmTWP69OnccccdfPvttx3dJOUMqbTImjVrpM/nq/3/xIkTO7hFFyYvL0/u3r1b/uIXv5CvvvpqRzenTe666y759ttvSymlfPvtt+Vdd93VwS1qu82bN8vCwkI5fvx4mZeX19HNuWAlJSVyw4YNtbeffPJJ+ctf/rIDW3ThysvLa///wQcfyOnTp3dga5RzqR5ZC40fPx6XywXA0KFDOXLkCLZtd3Cr2q5///707dsXTQvOl8DJkyfZuXMnmZmZAGRmZrJz586g/dY/YsQIEhISOroZ7SYmJoZrrrmm9vbQoUMpLCzswBZduMjIyNr/V1RUIIRKDBworujs92312muvccMNNwRtELgcFBUV0bVrV3RdB0DXdeLj4ykqKiI2NraDW6ecy7ZtFi9ezIQJEzq6KRfs17/+NevWrUNKyd/+9reObo5SQwWyGjNmzGjyG+P69etrPzBXrlzJihUreO211y5l81qtpdejKBfb448/TlhYGHfeeWdHN+WC/f73vwfg7bff5k9/+hMvvvhiB7dIARXIai1btuy8x3zwwQc888wzvPLKK3Tp0uUStKrtWnI9wSwhIYGjR49iWRa6rmNZFseOHbushucuB0899RT5+fm88MILl9UIxvTp0/ntb39LSUkJnTp16ujmXPEun1fWRfbRRx/xxz/+kZdeeonk5OSObs4Vr3PnzqSmppKTkwNATk4OqampalgxgDz99NPs2LGDhQsX4na7O7o5F6SyspKioqLa22vWrCE6OpqYmJgObJVyhiqs2ULXXnstLperzgflK6+8ErTfxnJycvjTn/5EeXk5LpeL0NBQ/v73v9O3b9+OblqL7d27l0cffZTy8nKioqJ46qmn6N27d0c3q02eeOIJVq9ezYkTJ+jUqRMxMTGsXLmyo5vVZrt37yYzM5OePXsSEhICQHJyMgsXLuzglrXNiRMnePDBB6mqqkLTNKKjo/nP//xP0tPTO7ppCiqQKYqiKEFODS0qiqIoQU0FMkVRFCWoqUCmKIqiBDUVyBRFUZSgpgKZoiiKEtTUhmgl4GRnZ/PLX/6y0Z+9/PLLjBkzpl1/38aNG9m0aRM/+clPAmrT7pEjR3jxxRfZsWMHubm5VFdX8+GHH6p9jIpSjwpkSsCaP38+3bp1q3PfxdjntmnTJhYsWMADDzwQUIEsPz+f9957j/T0dEaMGMFnn33W0U1SlICkApkSsFJTU+nRo0dHN6NNpJT4/f4LymgxcuRI1q9fD8Cbb76pApmiNCFwvn4qSitUVVXx5z//mQkTJjBw4EAmTJjAX/7ylzqldbxeL3/4wx/IzMxk2LBhXHfdddx///3s3bu39pjnnnuOBQsWAJCenk5KSgopKSmAM+SYkpLCxo0b6/zu7OxsUlJSOHz4cO19EyZM4JFHHmHp0qXcdNNNDBw4kLVr1wKQm5vL/fffz8iRIxk8eDBz5szhiy++OO81BlLvUFECmeqRKQHLsixM06y9LYRA13VM0+Tee+9l7969PPDAA6SkpLB161aef/55ysrKePTRRwHw+XxUVlbywAMPEBcXR1lZGa+//jpz5szh3XffJS4ujpkzZ3LkyBGWLl3K66+/fkFVATZu3Ehubi7z5s2jc+fOJCUl8c033zB37lxSU1N5/PHHCQ0NZfHixdxzzz288cYbDBw48IKfJ0W50qlApgSsm2++uc7t4cOHs3jxYnJycvjyyy9ZtGgRI0eOBGD06NEALFy4kPvuu4/OnTsTGRlZW3YDnMA4duxYxowZw8qVK7nnnnvo1q1b7TzckCFDMIy2vyXKy8vJzs4mLi6u9r7vfe97JCQk8I9//KN2mHHs2LFkZmby/PPP8/zzz7f59ymK4lCBTAlYCxcupGvXrrW3w8PDAfj0009JSkpi2LBhdXps1113Hc8++yxbt25l4sSJALz77ru8/PLL7N+/n1OnTtUeu2/fvnZv75AhQ+oEserqajZv3syPf/xjNE2r09YxY8awYsWKdm+DolyJVCBTAla/fv0aXexRXFxMQUFBk5nHS0tLAafUxsMPP8yMGTOYN28enTp1QgjBj370I3w+X7u399wgBlBWVoZlWc32vGzbVnNhinKBVCBTgk5MTAzJyck8++yzjf48KSkJcKp59+jRgyeffLL2Z36/n7Kyshb9Ho/HU/uYc50JlPUJIercjoyMRNM05s6dS1ZWVqOPUUFMUS6cCmRK0Bk3bhyrV68mLCyMPn36NHlcdXV1g8Uby5cvx7KsOvedmbuqrq4mIiKi9v7ExETAqa01duzY2vs//vjjFrUzLCyMESNGkJuby69+9SsVtBTlIlGBTAk6U6dOJTs7m3vuuYcf/OAHDBgwAJ/Px6FDh1izZg0LFy4kNDSUcePG8e9//5s//OEPjB8/nu3bt7No0SKioqLqnO9MMHz55ZfJyMhA0zQGDRpEfHw8o0aN4v/+7//o1KkTsbGxvPPOO3WW3Z/Po48+yp133sm9997Ld7/7XeLi4igpKWHnzp1YlsUjjzzS7ONXrVoFwI4dOwD45JNPiI2NJTY2llGjRrXmaVOUy5YKZErQcblcvPTSS/z1r39lyZIlHD58mLCwMLp3784NN9yAy+UCYNasWRQVFfHWW2+xZMkSBg0axAsvvMC8efPqnG/8+PHccccdvP766yxcuBApJXl5eQD8+c9/5ne/+x1PPPEEHo+H2267jWuuuYbf/OY3LWpreno6S5cuZcGCBTzxxBOcOnWK2NhY0tLSuP3228/7+IceeqjO7cceewyAUaNG8eqrr7aoDYpyuVMVohVFUZSgpgbtFUVRlKCmApmiKIoS1FQgUxRFUYKaCmSKoihKUFOBTFEURQlqKpApiqIoQU0FMkVRFCWoqUCmKIqiBDUVyBRFUZSg9v8BZ994sSLG/TkAAAAASUVORK5CYII=",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "from matplotlib.lines import Line2D\n",
        "from matplotlib.patches import Patch\n",
        "\n",
        "colours = [\"#ec6f86\", \"#4573e7\", \"#ad61ed\"]\n",
        "\n",
        "\n",
        "def plot_points(x_train, y_train, x_test, y_test):\n",
        "    c_train = []\n",
        "    c_test = []\n",
        "\n",
        "    for y in y_train:\n",
        "        c_train.append(colours[y])\n",
        "\n",
        "    for y in y_test:\n",
        "        c_test.append(colours[y])\n",
        "\n",
        "    plt.scatter(x_train[:, 0], x_train[:, 1], c=c_train)\n",
        "    plt.scatter(x_test[:, 0], x_test[:, 1], c=c_test, marker=\"x\")\n",
        "\n",
        "    plt.xlabel(\"Feature 1\", fontsize=16)\n",
        "    plt.ylabel(\"Feature 2\", fontsize=16)\n",
        "\n",
        "    ax = plt.gca()\n",
        "    ax.set_aspect(1)\n",
        "\n",
        "    c_transparent = \"#00000000\"\n",
        "\n",
        "    custom_lines = [\n",
        "        Patch(facecolor=colours[0], edgecolor=c_transparent, label=\"Class 0\"),\n",
        "        Patch(facecolor=colours[1], edgecolor=c_transparent, label=\"Class 1\"),\n",
        "        Patch(facecolor=colours[2], edgecolor=c_transparent, label=\"Class 2\"),\n",
        "        Line2D([0], [0], marker=\"o\", color=c_transparent, label=\"Train\",\n",
        "               markerfacecolor=\"black\", markersize=10),\n",
        "        Line2D([0], [0], marker=\"x\", color=c_transparent, label=\"Test\",\n",
        "               markerfacecolor=\"black\", markersize=10),\n",
        "    ]\n",
        "\n",
        "    ax.legend(handles=custom_lines, bbox_to_anchor=(1.0, 0.75))\n",
        "\n",
        "\n",
        "plot_points(x_train_final, y_train, x_test_final, y_test)\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "6xrkEWrTNp-c"
      },
      "source": [
        "# 分类器模型说明\n",
        "\n",
        "### 在数据集中，我们有三个类别——Covid19、病毒性肺炎和正常人。\n",
        "\n",
        "### 我们的方法是将分类器分为两个不同的模型。 第一个模型将在“正常人”和“Covid19/病毒性肺炎”类之间进行分类。 第二个模型将在“Covid”和“Viral Penumonia”类之间进行分类\n",
        "\n",
        "### 这里的第一个模型用 Model-1 表示，第二个用 Model-2 表示。"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "bbj3YRynG3i0"
      },
      "source": [
        "### 分类器Model-1 所需函数"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 15,
      "metadata": {
        "id": "JvoQMcWF8r4Z"
      },
      "outputs": [],
      "source": [
        "def get_angles(x):\n",
        "\n",
        "    beta0 = 2 * np.arcsin(np.sqrt(x[1] ** 2) / np.sqrt(x[0] ** 2 + x[1] ** 2 + 1e-12))\n",
        "    beta1 = -2 * np.arcsin(np.sqrt(x[1] ** 2) / np.sqrt(x[2] ** 2 + x[1] ** 2 + 1e-12))\n",
        "    beta2 = 2 * np.arcsin(np.sqrt(x[2] ** 2 + x[1] ** 2)/np.sqrt(x[0] ** 2 + x[1] ** 2 + x[2] ** 2 ))\n",
        "\n",
        "    return np.array([beta2, -beta1 / 2, beta1 / 2, -beta0 / 2, beta0 / 2])\n",
        "\n",
        "    "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 16,
      "metadata": {
        "id": "WmRvuHrfG96o"
      },
      "outputs": [],
      "source": [
        "def statepreparation_1(a):\n",
        "\n",
        "        qml.Hadamard(wires=0)\n",
        "        qml.Hadamard(wires=1)\n",
        "        \n",
        "        qml.RZ(a[0], wires=0)\n",
        "        qml.RZ(a[1], wires=1)\n",
        "        qml.CNOT(wires=[0,1])\n",
        "        qml.RZ(a[0]*a[1], wires=1)\n",
        "        qml.CNOT(wires=[0,1])\n",
        "\n",
        "\n",
        "        "
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 17,
      "metadata": {
        "id": "L5MOaNj_HKa2"
      },
      "outputs": [],
      "source": [
        "def layer_1(W):\n",
        "    qml.Rot(W[0, 0], W[0, 1], W[0, 2], wires=0)\n",
        "    qml.Rot(W[1, 0], W[1, 1], W[1, 2], wires=1)\n",
        "    # qml.Rot(W[2, 0], W[2, 1], W[2, 2], wires=2)\n",
        "    \n",
        "    qml.CNOT(wires=[0, 1])\n",
        "    # qml.CNOT(wires=[0, 2])\n",
        "    # qml.CNOT(wires=[1, 2])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 18,
      "metadata": {
        "id": "CjT9YycqHMvK"
      },
      "outputs": [],
      "source": [
        "dev_1 = qml.device(\"default.qubit\", wires=2)\n",
        "@qml.qnode(dev_1)\n",
        "def circuit_1(weights, x=None):\n",
        "    # Feature mapping\n",
        "    # angle = get_angles(x)\n",
        "    statepreparation_1(x)\n",
        "    # variational classifier\n",
        "    for w in weights:\n",
        "        layer_1(w)\n",
        "    \n",
        "    return qml.expval(qml.PauliZ(1))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 19,
      "metadata": {
        "id": "pE4EPKw1HUH3"
      },
      "outputs": [],
      "source": [
        "def classifier_training_1(params, x=None, y=None):\n",
        "    weights = params[0]\n",
        "    bias = params[1]\n",
        "\n",
        "    out_probs = circuit_1(weights, x=x) + bias\n",
        "    return (out_probs-y)**2\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 20,
      "metadata": {
        "id": "26WdKy7PHxgQ"
      },
      "outputs": [],
      "source": [
        "def classifier_prediction_1(params, x=None):\n",
        "    weights = params[0]\n",
        "    bias = params[1]\n",
        "\n",
        "    out_probs = circuit_1(weights, x=x) + bias\n",
        "\n",
        "    \n",
        "    if(out_probs>0):\n",
        "        return 1\n",
        "    else:\n",
        "        return -1"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 21,
      "metadata": {
        "id": "x1jtRUU2H3rF"
      },
      "outputs": [],
      "source": [
        "def circuit_output_test(params, x=None):\n",
        "    weights = params[0]\n",
        "    bias = params[1]\n",
        "\n",
        "    out_probs = circuit(weights, x=x) + bias\n",
        "\n",
        "    return out_probs\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 22,
      "metadata": {
        "id": "h8zNvXOuH7F4"
      },
      "outputs": [],
      "source": [
        "def cost_1(params, X, Y):\n",
        "\n",
        "    y_pred = np.array([classifier_training_1(params, x=X[i], y=Y[i]) for i in range(len(Y))])\n",
        "\n",
        "    cost = np.sum(y_pred) / len(Y)\n",
        "    return cost"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 23,
      "metadata": {
        "id": "PnwvdZSDH-c8"
      },
      "outputs": [],
      "source": [
        "def accuracy_1(params, x_train, y_train, iter):\n",
        "\n",
        "    y_pred_train = np.array([classifier_prediction_1(params, x=x) for x in x_train])\n",
        "    acc_train = np.sum(y_pred_train==y_train) / len(y_train)\n",
        "\n",
        "    print(\"Iter=> {}   train_cost=> {}   train_acc=> {} \".format(iter+1, cost_1(params, x_train, y_train), acc_train))\n",
        "\n",
        "    return acc_train\n"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xaKqVa18IHz6"
      },
      "source": [
        "# 分类器Model-2 所需函数"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 25,
      "metadata": {
        "id": "tMNtf9DcIDmO"
      },
      "outputs": [],
      "source": [
        "def statepreparation_2(a):\n",
        "\n",
        "        qml.Hadamard(wires=0)\n",
        "        qml.Hadamard(wires=1)\n",
        "        \n",
        "        qml.RZ(a[0], wires=0)\n",
        "        qml.RZ(a[1], wires=1)\n",
        "        qml.CNOT(wires=[0,1])\n",
        "        qml.RZ(a[0]*a[1], wires=1)\n",
        "        qml.CNOT(wires=[0,1])\n",
        "\n",
        "\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 26,
      "metadata": {
        "id": "HAXZ-a1aIQqG"
      },
      "outputs": [],
      "source": [
        "def layer_2(W):\n",
        "    qml.Rot(W[0, 0], W[0, 1], W[0, 2], wires=0)\n",
        "    qml.Rot(W[1, 0], W[1, 1], W[1, 2], wires=1)\n",
        "    # qml.Rot(W[2, 0], W[2, 1], W[2, 2], wires=2)\n",
        "    \n",
        "    qml.CNOT(wires=[0, 1])\n",
        "    # qml.CNOT(wires=[0, 2])\n",
        "    # qml.CNOT(wires=[1, 2])"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 27,
      "metadata": {
        "id": "9EZJ7OJcIT62"
      },
      "outputs": [],
      "source": [
        "dev_2 = qml.device(\"default.qubit\", wires=2)\n",
        "@qml.qnode(dev_2)\n",
        "def circuit_2(weights, x=None):\n",
        "    # Feature mapping\n",
        "    # angle = get_angles(x)\n",
        "    statepreparation_2(x)\n",
        "    \n",
        "    # variational classifier\n",
        "    for w in weights:\n",
        "        layer_2(w)\n",
        "    \n",
        "    return qml.expval(qml.PauliZ(1))"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 28,
      "metadata": {
        "id": "iumVNlMWIcDg"
      },
      "outputs": [],
      "source": [
        "def classifier_training_2(params, x=None, y=None):\n",
        "    weights = params[0]\n",
        "    bias = params[1]\n",
        "\n",
        "    out_probs = circuit_2(weights, x=x) + bias\n",
        "    return (out_probs-y)**2"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 29,
      "metadata": {
        "id": "aC47T9L6Ih2V"
      },
      "outputs": [],
      "source": [
        "def classifier_prediction_2(params, x=None):\n",
        "    weights = params[0]\n",
        "    bias = params[1]\n",
        "\n",
        "    out_probs = circuit_2(weights, x=x) + bias\n",
        "\n",
        "    \n",
        "    if(out_probs>0):\n",
        "        return 1\n",
        "    else:\n",
        "        return -1"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 30,
      "metadata": {
        "id": "Lix_uPNYIlJT"
      },
      "outputs": [],
      "source": [
        "def cost_2(params, X, Y):\n",
        "\n",
        "    y_pred = np.array([classifier_training_2(params, x=X[i], y=Y[i]) for i in range(len(Y))])\n",
        "\n",
        "    cost = np.sum(y_pred) / len(Y)\n",
        "    return cost\n"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 31,
      "metadata": {
        "id": "yZAVHcVOIoXE"
      },
      "outputs": [],
      "source": [
        "def accuracy_2(params, x_train, y_train, iter):\n",
        "\n",
        "    y_pred_train = np.array([classifier_prediction_2(params, x=x) for x in x_train])\n",
        "    acc_train = np.sum(y_pred_train==y_train) / len(y_train)\n",
        "\n",
        "    print(\"Iter=> {}   train_cost=> {}   train_acc=> {} \".format(iter+1, cost_2(params, x_train, y_train), acc_train))\n",
        "\n",
        "    return acc_train\n",
        "    "
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3-jPuIBwItKu"
      },
      "source": [
        "# Model-1"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "3BFJgYEPKMlX"
      },
      "source": [
        "## Model-1 数据\n",
        "0->新冠肺炎，1->正常，2->肺炎"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "7QKas5BHO7MP"
      },
      "source": [
        "#### 此处的标签已针对 Model-1 进行了相应修改"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 32,
      "metadata": {
        "id": "DC-vze_qIrlM"
      },
      "outputs": [],
      "source": [
        "x_train_1 = np.copy(x_train_final)\n",
        "y_train_1 = []\n",
        "\n",
        "for i in range(len(y_train)):\n",
        "    if(y_train[i]==0 or y_train[i]==2):  ##Covid or pneumonia\n",
        "        y_train_1.append(-1)\n",
        "    elif(y_train[i]==1):  ##normal person\n",
        "        y_train_1.append(1)\n",
        "\n",
        "y_train_1 = np.array(y_train_1)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "xhZkWLIDLjiY"
      },
      "source": [
        "## 二分类 Model-1"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 33,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "YylpUnE0K7Y5",
        "outputId": "e31862d6-e846-41bc-eec1-db7ac8d171aa"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "(tensor([[[ 0.01087343,  0.01079948,  0.00732663],\n",
              "          [ 0.00359391, -0.00276663, -0.00897993]],\n",
              " \n",
              "         [[-0.00830208,  0.0144087 , -0.00309174],\n",
              "          [-0.00107047, -0.01736615,  0.00729434]]], requires_grad=True), 0.0)"
            ]
          },
          "execution_count": 33,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "params_1 = (0.01 * np.random.randn(2, 2, 3), 0.0)\n",
        "params_1"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 34,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "nHkAyNQ3LTbW",
        "outputId": "47ee5224-1e7f-41e8-d295-6757f94cb20b"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Iter=> 1   train_cost=> 1.0144342042201346   train_acc=> 0.72 \n",
            "Iter=> 2   train_cost=> 0.9866833706481898   train_acc=> 0.576 \n",
            "Iter=> 3   train_cost=> 0.7686670402293903   train_acc=> 0.72 \n",
            "Iter=> 4   train_cost=> 0.7198873864975979   train_acc=> 0.704 \n",
            "Iter=> 5   train_cost=> 0.6772524013736086   train_acc=> 0.724 \n",
            "Iter=> 6   train_cost=> 0.6695098042921236   train_acc=> 0.732 \n",
            "Iter=> 7   train_cost=> 0.6649296646938998   train_acc=> 0.724 \n",
            "Iter=> 8   train_cost=> 0.6621105647255647   train_acc=> 0.74 \n",
            "Iter=> 9   train_cost=> 0.6598009473086186   train_acc=> 0.732 \n",
            "Iter=> 10   train_cost=> 0.6577469369389047   train_acc=> 0.744 \n",
            "Iter=> 11   train_cost=> 0.6557980635547447   train_acc=> 0.744 \n",
            "Iter=> 12   train_cost=> 0.6539492501961993   train_acc=> 0.748 \n",
            "Iter=> 13   train_cost=> 0.6522242100344467   train_acc=> 0.748 \n",
            "Iter=> 14   train_cost=> 0.650694184201086   train_acc=> 0.752 \n",
            "Iter=> 15   train_cost=> 0.6493948610177208   train_acc=> 0.748 \n",
            "Iter=> 16   train_cost=> 0.6483379883907123   train_acc=> 0.748 \n",
            "Iter=> 17   train_cost=> 0.6474884806450405   train_acc=> 0.748 \n",
            "Iter=> 18   train_cost=> 0.6468053308883388   train_acc=> 0.748 \n",
            "Iter=> 19   train_cost=> 0.6462482583989119   train_acc=> 0.748 \n",
            "Iter=> 20   train_cost=> 0.6457881318983403   train_acc=> 0.744 \n"
          ]
        }
      ],
      "source": [
        "iters = 20\n",
        "optimizer_1 = qml.AdagradOptimizer(stepsize=0.5)\n",
        "\n",
        "cost_list_1 = []\n",
        "train_acc_list_1 = []\n",
        "\n",
        "for iter in range(iters):\n",
        "    params_1 = optimizer_1.step(lambda v: cost_1(v, x_train_1, y_train_1), params_1)\n",
        "\n",
        "    cost_list_1.append(cost_1(params_1, x_train_1, y_train_1))\n",
        "    train_acc_list_1.append(accuracy_1(params_1, x_train_1, y_train_1, iter))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "_0KN2j9lWI_R"
      },
      "source": [
        "## Model-1损失函数"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 35,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 285
        },
        "id": "TnQU5gmrVimZ",
        "outputId": "9629f5eb-d039-44ea-cb71-bb239ccb1fb2"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7f50691eba10>]"
            ]
          },
          "execution_count": 35,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.plot(cost_list_1)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "6mQU4saMWMxy"
      },
      "source": [
        "## Model-1 的训练精度图"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 36,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 285
        },
        "id": "MPXF2BLwVoIZ",
        "outputId": "a1302a7e-91af-4e45-915e-2fcd1fa43e12"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7f5069f8f0d0>]"
            ]
          },
          "execution_count": 36,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.plot(train_acc_list_1)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "EuG6oxpIR95T"
      },
      "source": [
        "# Model-2"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "up0q4ehrR_9r"
      },
      "source": [
        "## 模型 2 数据\n",
        "0->新冠肺炎，1->正常，2->肺炎"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "kqB8sMaiPHKj"
      },
      "source": [
        "#### 此处的标签已针对 Model-2 进行了相应修改"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 37,
      "metadata": {
        "id": "MG-55rGiSGaI"
      },
      "outputs": [],
      "source": [
        "x_train_2 = []\n",
        "y_train_2 = []\n",
        "\n",
        "for i in range(len(y_train)):\n",
        "    if(y_train[i]==0):   ## covid\n",
        "        x_train_2.append(x_train_final[i])\n",
        "        y_train_2.append(1)\n",
        "    elif(y_train[i]==2):  ## pneumonia\n",
        "        x_train_2.append(x_train_final[i])\n",
        "        y_train_2.append(-1)\n",
        "\n",
        "\n",
        "x_train_2 = np.array(x_train_2)\n",
        "y_train_2 = np.array(y_train_2)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "d-DYdwjIS4_T"
      },
      "source": [
        "## 二分类 Model-2"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 38,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "osCtRvneS3FM",
        "outputId": "32b2879f-1e3b-4718-c9e2-f46ff99f7267"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "(tensor([[[ 0.02024168,  0.00596417, -0.00652891],\n",
              "          [-0.01570306, -0.00207371,  0.00175962]],\n",
              " \n",
              "         [[ 0.00706829,  0.01328816, -0.00416252],\n",
              "          [ 0.00233116, -0.01190055,  0.01281204]]], requires_grad=True), 0.0)"
            ]
          },
          "execution_count": 38,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        }
      ],
      "source": [
        "params_2 = (0.01 * np.random.randn(2, 2, 3), 0.0)\n",
        "params_2"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 39,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "uKoRU8xBTEiL",
        "outputId": "623a3791-a102-4a07-87d4-05f1abf3c23c"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Iter=> 1   train_cost=> 1.2863508836323407   train_acc=> 0.5666666666666667 \n",
            "Iter=> 2   train_cost=> 1.0308573593280184   train_acc=> 0.5666666666666667 \n",
            "Iter=> 3   train_cost=> 0.7467560882820213   train_acc=> 0.6111111111111112 \n",
            "Iter=> 4   train_cost=> 0.7047151673523769   train_acc=> 0.7111111111111111 \n",
            "Iter=> 5   train_cost=> 0.6817197991268287   train_acc=> 0.7555555555555555 \n",
            "Iter=> 6   train_cost=> 0.66242223250905   train_acc=> 0.7388888888888889 \n",
            "Iter=> 7   train_cost=> 0.645717406076691   train_acc=> 0.7333333333333333 \n",
            "Iter=> 8   train_cost=> 0.632416037667674   train_acc=> 0.7444444444444445 \n",
            "Iter=> 9   train_cost=> 0.623016632495948   train_acc=> 0.75 \n",
            "Iter=> 10   train_cost=> 0.6170149137165762   train_acc=> 0.75 \n",
            "Iter=> 11   train_cost=> 0.6133489913789305   train_acc=> 0.75 \n",
            "Iter=> 12   train_cost=> 0.6110852410333188   train_acc=> 0.75 \n",
            "Iter=> 13   train_cost=> 0.6096277531189721   train_acc=> 0.75 \n",
            "Iter=> 14   train_cost=> 0.6086377266384994   train_acc=> 0.75 \n",
            "Iter=> 15   train_cost=> 0.6079288810762171   train_acc=> 0.75 \n",
            "Iter=> 16   train_cost=> 0.6073984449500698   train_acc=> 0.75 \n",
            "Iter=> 17   train_cost=> 0.6069881738983589   train_acc=> 0.75 \n",
            "Iter=> 18   train_cost=> 0.6066634244098039   train_acc=> 0.75 \n",
            "Iter=> 19   train_cost=> 0.6064022436516054   train_acc=> 0.75 \n",
            "Iter=> 20   train_cost=> 0.6061897671652114   train_acc=> 0.75 \n"
          ]
        }
      ],
      "source": [
        "iters = 20\n",
        "optimizer_2 = qml.AdagradOptimizer(stepsize=0.5)\n",
        "\n",
        "cost_list_2 = []\n",
        "train_acc_list_2 = []\n",
        "\n",
        "for iter in range(iters):\n",
        "    params_2 = optimizer_2.step(lambda v: cost_2(v, x_train_2, y_train_2), params_2)\n",
        "\n",
        "    cost_list_2.append(cost_2(params_2, x_train_2, y_train_2))\n",
        "    train_acc_list_2.append(accuracy_2(params_2, x_train_2, y_train_2, iter))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "RGjV2w46Wbct"
      },
      "source": [
        "## Model-2损失函数"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 40,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 285
        },
        "id": "R_d6_C8AWdv1",
        "outputId": "ca5d2ac0-67fb-4c29-a506-a67e4ceb3699"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7f50681d0d90>]"
            ]
          },
          "execution_count": 40,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.plot(cost_list_2)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "UENuiv_wWgGX"
      },
      "source": [
        "## Model-2 训练精度图"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 41,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 285
        },
        "id": "vwcCN-_6WlC4",
        "outputId": "3b0b3fc3-8201-4cb3-d97f-4d2bd76800d2"
      },
      "outputs": [
        {
          "data": {
            "text/plain": [
              "[<matplotlib.lines.Line2D at 0x7f5069fd7f10>]"
            ]
          },
          "execution_count": 41,
          "metadata": {
            "tags": []
          },
          "output_type": "execute_result"
        },
        {
          "data": {
            "image/png": "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",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "output_type": "display_data"
        }
      ],
      "source": [
        "plt.plot(train_acc_list_2)"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "wKuT5KBeTiQk"
      },
      "source": [
        "# 预测"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "gqLx2cuKPcVW"
      },
      "source": [
        "### 在预测时，我们首先向 Model-1 提供输入。 如果它预测为正常人，那么它是分配给输入的最终预测。 如果不是，那么我们给 Model-2 提供相同的输入，它最终预测胸部 X 光片是 Covid10 患者还是病毒性肺炎患者。"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 42,
      "metadata": {
        "id": "7Y1yxaM9Tao4"
      },
      "outputs": [],
      "source": [
        "y_pred = []\n",
        "\n",
        "for i in range(len(x_test_final)):\n",
        "    tmp = classifier_prediction_1(params_1, x=x_test_final[i])\n",
        "    if (tmp == 1):  ## Normal person\n",
        "        y_pred.append(1)\n",
        "    else:   ## Covid or Pneumonia\n",
        "        tmp = classifier_prediction_2(params_2, x=x_test_final[i])\n",
        "        if(tmp == 1):  ## covid\n",
        "            y_pred.append(0)\n",
        "        elif(tmp == -1): ## Pneumonia\n",
        "            y_pred.append(2)\n",
        "\n",
        "y_pred = np.array(y_pred)"
      ]
    },
    {
      "cell_type": "code",
      "execution_count": 43,
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "r1trY_8EUuaM",
        "outputId": "3213f1e9-08a1-48b6-9643-8a5c5f4300f9"
      },
      "outputs": [
        {
          "name": "stdout",
          "output_type": "stream",
          "text": [
            "Final_Test_Accuracy =>  0.6\n"
          ]
        }
      ],
      "source": [
        "print(\"Final_Test_Accuracy => \", np.sum(y_pred==y_test)/len(y_test))"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "tQzw0oEbQIAk"
      },
      "source": [
        "### 当它在具有更大数据集的真实计算机上进行训练时，我们希望提高这种准确性。"
      ]
    }
  ],
  "metadata": {
    "accelerator": "GPU",
    "colab": {
      "name": "quantum_classifier_1.ipynb",
      "provenance": [],
      "toc_visible": true
    },
    "kernelspec": {
      "display_name": "Python 3",
      "language": "python",
      "name": "python3"
    },
    "language_info": {
      "codemirror_mode": {
        "name": "ipython",
        "version": 3
      },
      "file_extension": ".py",
      "mimetype": "text/x-python",
      "name": "python",
      "nbconvert_exporter": "python",
      "pygments_lexer": "ipython3",
      "version": "3.8.8"
    }
  },
  "nbformat": 4,
  "nbformat_minor": 0
}
